import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // 数据源 this.$store.state.xxx
  state: {
    // 全局配置
    /* globalConfig: {
      limit: 20, // 分页条数
      layoutSize: 'medium' // 布局大小 big medium small
    }, */
    user: {}, // 用户信息
    token: '', // 用户token
    menu: [] // 菜单权限
  },
  // 派生数据 this.$store.getters.xxx
  getters: {
    // 获取当前-全局配置
    /* GET_GLOBAL_CONFIG(state) {
      let globalConfig = JSON.parse(localStorage.getItem('GLOBAL_CONFIG'))
      if (globalConfig) {
        state.user = globalConfig
      }
      return state.user
    }, */
    // 获取当前-用户对象
    GET_USER(state) {
      state.user = JSON.parse(localStorage.getItem('USER')) || {}
      return state.user
    },
    // 获取当前-用户Token
    GET_TOKEN(state) {
      state.token = JSON.parse(localStorage.getItem('TOKEN')) || ''
      return state.token
    },
    // 获取当前-菜单
    GET_MENU(state) {
      state.menu = JSON.parse(localStorage.getItem('MENU')) || []
      return state.menu
    }
  },
  // 更改数据-同步 this.$store.commit('xxx', data)
  mutations: {
    // 保存当前-全局配置
    /* SET_GLOBAL_CONFIG(state, data) {
      state.globalConfig = data
      localStorageSet('GLOBAL_CONFIG', data)
    }, */
    // 保存当前-用户对象
    SET_USER(state, data) {
      state.user = data
      localStorageSet('USER', data)
    },
    // 保存当前-用户token
    SET_TOKEN(state, data) {
      state.token = data
      localStorageSet('TOKEN', data)
    },
    // 保存当前-用户菜单
    SET_MENU(state, data) {
      const menu = [...data]
      if (menu.length > 0 && menu[0].paht !== '/home') {
        menu.unshift({
          description: '首页', // 菜单说明，与功能无关，用于国际化菜单名称分辨
          icon: 'el-icon-s-home', // 菜单图片
          title: 'menu.Home', // 菜单名称，可使用国际化
          path: '/home', // 路由地址（非特殊情况path和src需保持一致）
          src: '/home', // vue页面地址在'src/views/'文件中
          keepAlive: false, // 是否缓存
          hideTag: false, // 是否需要隐藏tag标签（优先级高于父级标签高亮显示）
          parent: null, // 父级路由地址，子页面打开时父级tag高亮显示
          subMenu: [] // 子菜单
        })
      }
      state.menu = menu
      localStorageSet('MENU', menu)
    }
  },
  // mutations装饰器-异步
  actions: {

  }
})

// 本地存储-修改值
const localStorageSet = (key, value) => {
  if (value) {
    localStorage.setItem(key, JSON.stringify(value))
  } else {
    localStorage.removeItem(key)
  }
}
